/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import model.Cliente;
import model.Funcionario;
import model.GenericoDAO;
import model.Produto;
import model.Unidade;
import org.hibernate.Query;
import org.hibernate.Session;
import util.HibernateUtil;
import view.JCadastrarProduto;
import view.JEntradaProduto;
import view.JExibeProdutos;
import view.JPrincipal;




public class ControllerEntradaProdutos {
    
    private JPrincipal jf;
    private Produto produto;
    private String cod_barras;

    
    
    public ControllerEntradaProdutos(JPrincipal jf) {

        this.jf = jf;  
    }
    
    
    
    public void iniciaApp(){
            // Cria a tela e passa o controle pra tela
            JEntradaProduto janela = new JEntradaProduto(this,jf);
            janela.exibe();
    }    
    
    public Integer verifica_ultima_id_cadastrado(){

        Session s = HibernateUtil.getSessionFactory().openSession();
        int query = 0;
        //Query query new Query();
        
        try{
             query = (int)s.createQuery("SELECT Max(id) from model.Produto").uniqueResult();
             
//            produto = (Produto)s.createQuery("SELECT Max(id) from model.Produto")
//                       .uniqueResult();
                            
        }catch (Exception e) {
            
            JOptionPane.showMessageDialog(null, "Erro ao carregar Model produtos: "+e.getMessage());
            
        }

          return query; 
 
        
    }

    public List chama_valor_unidades(){

        List<Unidade> list = new ArrayList<Unidade>();
        Session s = HibernateUtil.getSessionFactory().openSession();
        Unidade unidade = null;
        //Query query new Query();
        
        try{
             list = s.createQuery("from model.Unidade").list();
             
//            produto = (Produto)s.createQuery("SELECT Max(id) from model.Produto")
//                       .uniqueResult();
                            
        }catch (Exception e) {
            
            JOptionPane.showMessageDialog(null, "Erro ao carregar Model unidade 111 - metodo chama_valor_unidades(): "+e.getMessage());
            
        }

          return list; 
 
    }
    
    
    public boolean cadastra_produto(Produto produto){

        this.produto = produto;

        GenericoDAO dao = new GenericoDAO();
        if(dao.Salvar(produto)){

            return true;
        }else{

            return false;
        }
    }
    
  public boolean verifica_se_produto_esta_cadastrado(String cod_barras){
        
      this.cod_barras = cod_barras;
       Session s = HibernateUtil.getSessionFactory().openSession();
       produto  = new Produto();
        
        try{
            
            produto = (Produto)s.createQuery("from model.Produto p where p.codigo_barras =: codigo_barras")
                        .setParameter("codigo_barras", cod_barras)
                        .uniqueResult();
            
        }catch (Exception e) {
            
            JOptionPane.showMessageDialog(null, "Erro ao carregar Model Funcionario - pesquisa de cpf: "+e.getMessage());
            
        }
        
        if (produto == null){
            return false; 
        }else{
            return true;
        }
     
  }  
    
  
    public Produto retorna_dados_do_produto(String cod_barras){
        
        //JOptionPane.showMessageDialog(null, "OK");
        
        this.cod_barras = cod_barras;
        
        Session s = HibernateUtil.getSessionFactory().openSession();
        produto = new Produto();
        
        try{
            
            produto =   (Produto)s.createQuery("from model.Produto p where p.codigoBarras =:codigo_barras")
                        .setParameter("codigo_barras", cod_barras)
                        .uniqueResult();
            
        }catch (Exception e) {
            
            JOptionPane.showMessageDialog(null, "Erro ao carregar dados do Model Produtos: "+e.getMessage());
            
        }
        
        return produto;

    }
    
 public void exibir_lista_produtos(){

    JExibeProdutos janela = new JExibeProdutos();
    janela.exibe();

}    
    
 public static List<Produto> listaProduto(){
    
    GenericoDAO dao = new GenericoDAO();
    List<Produto> produto = dao.getAll(Produto.class);
    return produto;
}   
    
public boolean verifica_se_produto_existe(String cod_barras){
        
        //JOptionPane.showMessageDialog(null, "OK");
        
        this.cod_barras = cod_barras;
        
        Session s = HibernateUtil.getSessionFactory().openSession();
        Produto produto = null;
        
        try{
            
            produto =   (Produto)s.createQuery("from model.Produto p where p.codigoBarras =:cod_barras")
                        .setParameter("cod_barras", cod_barras)
                        .uniqueResult();
            
        }catch (Exception e) {
            
            JOptionPane.showMessageDialog(null, "Erro ao carregar Model Produto: "+e.getMessage());
            
        }
        
        if (produto == null){
            return false; 
        }else{
            return true;
        }
        
    }    
    
    //altera_produto

     public boolean altera_produto(Produto produto){
        
 
        GenericoDAO dao = new GenericoDAO();
        
//        JOptionPane.showMessageDialog(null, this.produto.getId());
//        JOptionPane.showMessageDialog(null, produto.getId());
        
//        this.produto = (Produto) dao.getById(Produto.class, produto.getId());  

        if(dao.Atualizar(this.produto)){
            
            return true;
            
        }else{
            
            return false;
        }

    }   


    
}
